Network devices such as Ethernet switches are interconnected by communication links for receiving and transmitting data packets through physical ports. In order to provide redundancy or larger aggregate bandwidth, some network devices bundle multiple communication links to form link aggregations (LAGs) with their peering network devices. See FIG. 1. The IEEE 802.3ad is one standard specification that allows several physical ports to be bundled together to form a single logical channel. In said specification, however, the load balancing algorithm, that is how to distribute data packets among the physical ports, is not specifically spelled out, leaving room for implementations of different complexities and characteristics.
In many typical implementations, load sharing is statically configured. For example, packet distribution is based on an algorithm that selects a port based on addresses and session information: source address, destination address, or both source and destination addresses. Packets with the same addresses and session information are always sent to the same port in the LAG to prevent out-of-order packet delivery. Static load balancing algorithms do not take into account the amount of traffic assigned to each port and variation in traffic over time, and they therefore results in suboptimal utilization of the link bandwidth.
Some dynamic load balancing algorithms for LAG have been published. They primarily focus on the idea of calculating hash values based on the packets' addresses and session information and mapping the hash values to physical ports based on the measurements of the traffic load on the physical ports. The weakness of said algorithms is that changing the mappings of hash values to physical ports affects all packet flows with the same hash values, and said algorithms fail to address the impact on preventing out-of-order packet delivery when a large number of packet flows are momentarily assigned to different egress ports. Also, said dynamic load balancing algorithms do not deal with the quality of service (QoS) requirements of packet flows.